#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDate>
#include <QMessageBox>
#include <QSqlTableModel>
#include <QStandardItemModel>
#include <QFileDialog>
#include <QTextDocument>
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrintDialog>
#include <QtPrintSupport/QPrintPreviewDialog>
#include <QtPrintSupport/QPrinterInfo>
#include <QTextStream>
#include <QFile>
#include <QProcess>
#include <QTableWidget>
#include <QComboBox>
#include <QTimer>
#include <QSettings>

// 前向声明
class EmployeeDialog;
class ToyDialog;
class ProcessDialog;
class PasswordDialog;  // 添加密码对话框的前向声明
class SystemSettingsDialog;  // 添加系统设置对话框的前向声明

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    // 基础数据管理槽函数
    void onAddEmployee();
    void onAddOrUpdateEmployee(); // 新增：统一的添加/更新函数
    void onEditEmployee();
    void onDeleteEmployee();
    void onSearchEmployee(); // 新增：搜索员工
    void onResetEmployee(); // 新增：重置员工搜索
    void onEmployeeSelectionChanged(); // 新增：员工选择变化
    
    void onAddToy();
    void onAddOrUpdateToy(); // 新增：统一的添加/更新函数
    void onEditToy();
    void onDeleteToy();
    void onSearchProduct(); // 新增：搜索产品
    void onResetProduct(); // 新增：重置产品搜索
    void onProductSelectionChanged(); // 新增：产品选择变化
    
    void onAddDepartment(); // 新增：添加班组
    void onDeleteDepartment(); // 新增：删除班组
    
    // 工序管理槽函数 - 新增
    void onAddProcess();
    void onEditProcess();
    void onDeleteProcess();
    void onSearchProcess();
    void onResetProcess();
    
    // 生产记录操作槽函数
    void onAddProductionRow();
    void onRemoveProductionRow(); // 新增：删除生产记录行
    void onSaveProduction();
    
    // 报表生成槽函数
    void onGenerateDailyReport();
    void onGenerateMonthlyReport();
    void onGenerateProductionStats();
    void onCalculatePayroll();
    void onGenerateWageSlip(); // 新增：生成工资条
    
    // 重置按钮槽函数
    void onResetDailyReport();
    void onResetMonthlyReport(); 
    void onResetFactoryStats();
    void onResetWage();
    
    // 导出和备份槽函数
    void onExportData();
    void onExportWageDetails(); // 新增：导出工资明细
    void onExportAllEmployeeWages(); // 新增：导出所有员工月工资
    void onBackupData();
    
    // 打印槽函数 - 新增
    void onPrintData();
    void onPrintPreview();
    
    // 系统设置槽函数 - 新增
    void onSystemSettings(); // 新增：系统设置
    
    // 分页功能槽函数
    void onEmployeePageChanged(int page);
    void onToyPageChanged(int page);
    void onDepartmentPageChanged(int page);
    void onProductionPageChanged(int page);
    void onProcessPageChanged(int page);  // 工序管理分页槽函数
    void onDailyReportPageChanged(int page);  // 员工日报表分页槽函数
    void onMonthlyReportPageChanged(int page);  // 员工月报表分页槽函数
    void onFactoryStatsPageChanged(int page);  // 全厂/班组产量统计分页槽函数

private:
    Ui::MainWindow *ui;
    QSqlDatabase db;
    QSqlTableModel *employeeModel;
    QSqlTableModel *toyModel;
    QSqlTableModel *productionModel;
    
    // 分页相关变量
    int currentEmployeePage;
    int currentToyPage;
    int currentDeptPage;
    int currentProductionPage;
    int currentProcessPage;         // 工序管理当前页
    int itemsPerPage;
    int currentRecentActivityPage;  // 最近生产记录当前页
    int totalRecentActivityPages;   // 最近生产记录总页数
    int totalEmployeeRecords;       // 员工总记录数
    int totalToyRecords;            // 产品总记录数
    int totalDeptRecords;           // 班组总记录数
    int totalProcessRecords;        // 工序总记录数
    
    // 数据查询页面分页相关变量
    int currentDailyReportPage;     // 员工日报表当前页
    int totalDailyReportRecords;    // 员工日报表总记录数
    int currentMonthlyReportPage;   // 员工月报表当前页
    int totalMonthlyReportRecords;  // 员工月报表总记录数
    int currentFactoryStatsPage;    // 全厂/班组产量统计当前页
    int totalFactoryStatsRecords;   // 全厂/班组产量统计总记录数
    
    // 最近生产记录分页按钮
    QPushButton *pushButton_firstPageRecentActivity;
    QPushButton *pushButton_prevPageRecentActivity;
    QPushButton *pushButton_nextPageRecentActivity;
    QPushButton *pushButton_lastPageRecentActivity;
    QLabel *label_pageInfoRecentActivity;
    
    // 员工管理分页按钮
    QPushButton *pushButton_firstPageEmployee;
    QPushButton *pushButton_prevPageEmployee;
    QPushButton *pushButton_nextPageEmployee;
    QPushButton *pushButton_lastPageEmployee;
    QLabel *label_pageInfoEmployee;
    
    // 产品管理分页按钮
    QPushButton *pushButton_firstPageProduct;
    QPushButton *pushButton_prevPageProduct;
    QPushButton *pushButton_nextPageProduct;
    QPushButton *pushButton_lastPageProduct;
    QLabel *label_pageInfoProduct;
    
    // 班组管理分页按钮
    QPushButton *pushButton_firstPageDepartment;
    QPushButton *pushButton_prevPageDepartment;
    QPushButton *pushButton_nextPageDepartment;
    QPushButton *pushButton_lastPageDepartment;
    QLabel *label_pageInfoDepartment;
    
    // 工序管理分页按钮
    QPushButton *pushButton_firstPageProcess;
    QPushButton *pushButton_prevPageProcess;
    QPushButton *pushButton_nextPageProcess;
    QPushButton *pushButton_lastPageProcess;
    QLabel *label_pageInfoProcess;
    
    // 员工日报表分页按钮
    QPushButton *pushButton_firstPageDailyReport;
    QPushButton *pushButton_prevPageDailyReport;
    QPushButton *pushButton_nextPageDailyReport;
    QPushButton *pushButton_lastPageDailyReport;
    QLabel *label_pageInfoDailyReport;
    
    // 员工月报表分页按钮
    QPushButton *pushButton_firstPageMonthlyReport;
    QPushButton *pushButton_prevPageMonthlyReport;
    QPushButton *pushButton_nextPageMonthlyReport;
    QPushButton *pushButton_lastPageMonthlyReport;
    QLabel *label_pageInfoMonthlyReport;
    
    // 全厂/班组产量统计分页按钮
    QPushButton *pushButton_firstPageFactoryStats;
    QPushButton *pushButton_prevPageFactoryStats;
    QPushButton *pushButton_nextPageFactoryStats;
    QPushButton *pushButton_lastPageFactoryStats;
    QLabel *label_pageInfoFactoryStats;
    
    // 初始化数据库
    bool initDatabase();
    
    // 创建数据库表
    bool createTables();
    
    // 数据迁移函数 - 新增
    bool migrateToProcessSystem();
    
    // 加载模拟数据
    bool loadMockData();
    
    // 初始化UI数据
    void initUI();
    void initStyles();
    void loadInitialData();
    void loadEmployees();
    void loadToys();
    void loadEmployeeComboBoxes();
    void loadToyComboBoxes();
    void loadDepartments(); // 新增：加载班组数据
    void loadProcesses(); // 新增：加载工序数据
    void loadTodayProductionData(); // 新增：加载今日生产数据
    void setupProcessManagementUI(); // 新增：初始化工序管理界面
    void connectSignalsAndSlots();
    void updateDashboard();
    
    // 生产记录辅助函数
    void updateRowSubtotal(int row);
    void updateProductionTotal();
    void updateProcessListForToy(QComboBox *toyComboBox, QComboBox *processComboBox, int toyId);
    void loadToyDataIntoComboBox(QComboBox *comboBox);
    void connectProcessSelectionChanged(QComboBox *processComboBox);
    
    // 工序选择变化处理槽函数
    void onProcessSelectionChanged(int index);
    
    // 工资计算方法
    void calculateSingleEmployeePayroll(int employeeId, const QString &monthStart, const QString &monthEnd);
    void calculateAllEmployeesPayroll(const QString &monthStart, const QString &monthEnd);
    
    // 生产详情显示
    void showProductionDetails(int employeeId, const QString &toyName, const QString &startDate, const QString &endDate);
    // 新增支持工序维度的生产详情显示
    void showProductionDetails(int employeeId, const QString &toyName, const QString &processName, const QString &startDate, const QString &endDate);
    
    // 生产统计详情显示
    void showFactoryStatsDetails(const QString &productInfo, const QString &statsType, const QString &team, const QString &startDate, const QString &endDate);
    
    // 打印辅助函数 - 新增
    void printTableWidget(QTableWidget *tableWidget, const QString &title);
    QString generateHtmlTable(QTableWidget *tableWidget, const QString &title);
    
    // 导出辅助函数 - 新增
    void exportTableWidget(QTableWidget *tableWidget, const QString &fileName);
    void exportTableWidgetToExcel(QTableWidget *tableWidget, const QString &fileName); // 新增：导出为Excel格式
    void exportAllEmployeeWages(const QString &monthStart, const QString &monthEnd, const QString &month); // 新增：导出所有员工月工资
    
    // 刷新员工相关数据的统一接口 - 新增
    void refreshEmployeeData();
    
    // 分页辅助函数
    void loadEmployeesWithPagination(int page = 0);
    void loadToysWithPagination(int page = 0);
    void loadDepartmentsWithPagination(int page = 0);
    void loadProcessesWithPagination(int page = 0);  // 工序管理分页数据加载
    void loadRecentActivityWithPagination(int page = 0);  // 新增：加载最近生产记录分页数据
    void loadDailyReportWithPagination(int page = 0);     // 新增：加载员工日报表分页数据
    void loadMonthlyReportWithPagination(int page = 0);   // 新增：加载员工月报表分页数据
    void loadFactoryStatsWithPagination(int page = 0);    // 新增：加载全厂/班组产量统计分页数据
    void updatePaginationControls(const QString &tableName, int currentPage, int totalPages);
    
    // 最近生产记录分页槽函数
    void onRecentActivityPageChanged(int page);
    
    // 系统设置相关函数 - 新增
    void showSystemSettings();
};

#endif // MAINWINDOW_H